<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Namensparameter</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Namensparameter"> <link href="./_mw_/ext.math.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Namensparameter rootpage-Namensparameter skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Namensparameter</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr">
<p>Ein <b>Namensparameter</b> (englisch <i>call by name</i>) ist ein <a href="Parameter_(Informatik)" title="Parameter (Informatik)">Parameter</a> eines <a href="Unterprogramm" title="Unterprogramm">Unterprogramms</a> in <a href="Programmiersprache" title="Programmiersprache">Programmiersprachen</a>, der nicht bei seiner Übergabe, sondern erst bei seiner Benutzung, entsprechend der Signatur des Aktualparameters berechnet wird. Dies wurde vor allem in der Programmiersprache <a href="COBOL" title="COBOL">COBOL</a>, daneben auch in <a href="Algol_60" title="Algol 60">ALGOL 60</a> genutzt, ist jedoch in modernen Sprachen unüblich.
</p><p>Zur Einordnung: In <a href="Fortran" title="Fortran">Fortran</a> gibt es ausschließlich <a href="Referenzparameter" title="Referenzparameter">Referenzparameter</a>, in <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a> und <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a> nur <a href="Wertparameter" title="Wertparameter">Wertparameter</a>, in <a href="C%2B%2B" title="C++">C++</a> gibt es beides. Namensparameter existieren – mit Ausnahme von <a href="Pr%C3%A4prozessor" title="Präprozessor">Präprozessor</a>-Makros in C und C++, deren Argumente Namensparameter sind – in keiner dieser Sprachen.
</p><p>Namensparameter ermöglichen sowohl die Übergabe als auch Rückgabe von Werten.
</p>
<div class="mw-heading mw-heading2"><h2 id="Ein_einfaches_Beispiel">Ein einfaches Beispiel</h2></div>
<pre>A[1] := 10
A[2] := 20
i := 1
x := Funkt (A[i], i)
FUNCTION Funkt (a, i) : Real
i := i+1
RETURN a
END
</pre>
<p>x wird der Wert 20 zugewiesen. Im Werteparameter-Fall wäre x dagegen 10, ebenso bei Referenzparametern.
</p>
<div class="mw-heading mw-heading2"><h2 id="Ein_angewandtes_Beispiel_in_ALGOL_60">Ein angewandtes Beispiel in ALGOL 60</h2></div>
<p>Als Beispiel soll die <a href="Simpsonsche_Formel" class="mw-redirect" title="Simpsonsche Formel">Simpsonsche Näherungsformel</a> zur Integralberechnung dienen. Ein Flächenintegral
</p><p><br>
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle y=f(x)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>y</mi>
<mo>=</mo>
<mi>f</mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle y=f(x)}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/2311a6a75c54b0ea085a381ba472c31d59321514.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:8.672ex; height:2.843ex;" alt="{\displaystyle y=f(x)}" loading="lazy"></span></dd>
<dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle F=\int _{a}^{b}{ydx}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>F</mi>
<mo>=</mo>
<msubsup>
<mo>∫<!-- ∫ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi>a</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi>b</mi>
</mrow>
</msubsup>
<mrow class="MJX-TeXAtom-ORD">
<mi>y</mi>
<mi>d</mi>
<mi>x</mi>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle F=\int _{a}^{b}{ydx}}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/cd6bbec3881937535d26f6ea2db0e06da1de4a95.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.338ex; width:12.329ex; height:6.343ex;" alt="{\displaystyle F=\int _{a}^{b}{ydx}}" loading="lazy"></span></dd></dl>
<p>kann in <i>n</i> Streifen der Breite <i>h</i> zerlegt werden. Dann lautet die hier verwendete Näherung:
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle h=(b-a)/n}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>h</mi>
<mo>=</mo>
<mo stretchy="false">(</mo>
<mi>b</mi>
<mo>−<!-- − --></mo>
<mi>a</mi>
<mo stretchy="false">)</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mi>n</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle h=(b-a)/n}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/e3c963e71ece9c703fdf76d899a8ac8b3ab636d6.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:13.872ex; height:2.843ex;" alt="{\displaystyle h=(b-a)/n}" loading="lazy"></span></dd>
<dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle y_{i}=f(x_{i})\quad \quad mit\quad x_{i}=a+h\cdot i,\quad i=0\dots n}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>y</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>i</mi>
</mrow>
</msub>
<mo>=</mo>
<mi>f</mi>
<mo stretchy="false">(</mo>
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>i</mi>
</mrow>
</msub>
<mo stretchy="false">)</mo>
<mspace width="1em"></mspace>
<mspace width="1em"></mspace>
<mi>m</mi>
<mi>i</mi>
<mi>t</mi>
<mspace width="1em"></mspace>
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>i</mi>
</mrow>
</msub>
<mo>=</mo>
<mi>a</mi>
<mo>+</mo>
<mi>h</mi>
<mo>⋅<!-- ⋅ --></mo>
<mi>i</mi>
<mo>,</mo>
<mspace width="1em"></mspace>
<mi>i</mi>
<mo>=</mo>
<mn>0</mn>
<mo>…<!-- … --></mo>
<mi>n</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle y_{i}=f(x_{i})\quad \quad mit\quad x_{i}=a+h\cdot i,\quad i=0\dots n}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/47a6d9a357c7e4e0d6daf241ccd4cbe9b0078d77.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:47.335ex; height:2.843ex;" alt="{\displaystyle y_{i}=f(x_{i})\quad \quad mit\quad x_{i}=a+h\cdot i,\quad i=0\dots n}" loading="lazy"></span></dd>
<dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle F\approx {\frac {h}{3}}(y_{0}+y_{n}+4(y_{1}+y_{3}+\cdots y_{n-1})+2(y_{2}+y_{4}+\cdots +y_{n-2}))}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>F</mi>
<mo>≈<!-- ≈ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mi>h</mi>
<mn>3</mn>
</mfrac>
</mrow>
<mo stretchy="false">(</mo>
<msub>
<mi>y</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<msub>
<mi>y</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>n</mi>
</mrow>
</msub>
<mo>+</mo>
<mn>4</mn>
<mo stretchy="false">(</mo>
<msub>
<mi>y</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
<mo>+</mo>
<msub>
<mi>y</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>3</mn>
</mrow>
</msub>
<mo>+</mo>
<mo>⋯<!-- ⋯ --></mo>
<msub>
<mi>y</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>n</mi>
<mo>−<!-- − --></mo>
<mn>1</mn>
</mrow>
</msub>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mn>2</mn>
<mo stretchy="false">(</mo>
<msub>
<mi>y</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msub>
<mo>+</mo>
<msub>
<mi>y</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>4</mn>
</mrow>
</msub>
<mo>+</mo>
<mo>⋯<!-- ⋯ --></mo>
<mo>+</mo>
<msub>
<mi>y</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>n</mi>
<mo>−<!-- − --></mo>
<mn>2</mn>
</mrow>
</msub>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle F\approx {\frac {h}{3}}(y_{0}+y_{n}+4(y_{1}+y_{3}+\cdots y_{n-1})+2(y_{2}+y_{4}+\cdots +y_{n-2}))}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/64aeaffa44eb8091506211c88ba5d90fbaf06773.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.838ex; width:65.565ex; height:5.343ex;" alt="{\displaystyle F\approx {\frac {h}{3}}(y_{0}+y_{n}+4(y_{1}+y_{3}+\cdots y_{n-1})+2(y_{2}+y_{4}+\cdots +y_{n-2}))}" loading="lazy"></span></dd></dl>
<p>In Algol 60 wird dies folgendermaßen umgesetzt (das Beispiel ist nicht optimal, sondern eine möglichst genaue Umsetzung der Definition):
</p><p><br>
</p>
<pre> 1 'REAL' 'PROCEDURE' SIMPSON(A,B,F,X,N);
2 'REAL' A, B, X;
3 'INTEGER' N;
4 'REAL' 'PROCEDURE' F;
5 'BEGIN'
6 'INTEGER' I;
7 'REAL' H, S1, S2;
8 <b> 'ARRAY' Y[0:N];</b>
9 H := (B-A)/N;
10 'FOR' I:=0 'STEP' 1 'UNTIL' N 'DO'
11 'BEGIN'
12 <b> X:=A+H*I;</b>
13 <b> Y[I]:=F;</b>
14 'END';
15 S1 := S2 := 0;
16 'FOR' I:=1 'STEP' 2 'UNTIL' N-1 'DO' S1:=S1+Y[I];
17 'FOR' I:=2 'STEP' 2 'UNTIL' N-2 'DO' S2:=S2+Y[I];
18 SIMPSON:=H/3*(Y[0]+Y[N]+4*S1+2*S2);
19 'END'
</pre>
<p>Alle Parameter sind hier Namensparameter. Davon wird bei den Parametern <i>X</i> und <i>F</i> besonders Gebrauch gemacht (Zeilen 12 und 13). In Zeile 8 wird ein <i>dynamisches Feld</i> deklariert. Das Integral
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle y=\int _{0}^{1}{\sin(k)}dk}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>y</mi>
<mo>=</mo>
<msubsup>
<mo>∫<!-- ∫ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msubsup>
<mrow class="MJX-TeXAtom-ORD">
<mi>sin</mi>
<mo><!-- --></mo>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo stretchy="false">)</mo>
</mrow>
<mi>d</mi>
<mi>k</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle y=\int _{0}^{1}{\sin(k)}dk}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/69866d594915d008356a0b5dbafba9b773dd23dc.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.338ex; width:16.463ex; height:6.176ex;" alt="{\displaystyle y=\int _{0}^{1}{\sin(k)}dk}" loading="lazy"></span></dd></dl>
<p>wird näherungsweise (<i>n=20</i>) berechnet mittels
</p>
<pre> Y:=SIMPSON(0,1,SIN(K),K,20);
</pre>
<p>Im Unterprogramm <i>SIMPSON</i> wird hier <i>F</i> durch <i>SIN(K)</i> und <i>X</i> durch <i>K</i> ersetzt.
</p><p>Es sind auch Doppelintegrale möglich:
</p><p>Das bestimmte Integral
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z=\int _{0}^{1}{\int _{-1}^{1}{e^{\sqrt {x^{2}+y^{2}}}dy}\,dx}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>z</mi>
<mo>=</mo>
<msubsup>
<mo>∫<!-- ∫ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msubsup>
<mrow class="MJX-TeXAtom-ORD">
<msubsup>
<mo>∫<!-- ∫ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mo>−<!-- − --></mo>
<mn>1</mn>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msubsup>
<mrow class="MJX-TeXAtom-ORD">
<msup>
<mi>e</mi>
<mrow class="MJX-TeXAtom-ORD">
<msqrt>
<msup>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>+</mo>
<msup>
<mi>y</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
</msqrt>
</mrow>
</msup>
<mi>d</mi>
<mi>y</mi>
</mrow>
<mspace width="thinmathspace"></mspace>
<mi>d</mi>
<mi>x</mi>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z=\int _{0}^{1}{\int _{-1}^{1}{e^{\sqrt {x^{2}+y^{2}}}dy}\,dx}}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/c5b7d36bcdd3507b1afd56aa805565fefe47af1e.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.505ex; width:25.07ex; height:6.343ex;" alt="{\displaystyle z=\int _{0}^{1}{\int _{-1}^{1}{e^{\sqrt {x^{2}+y^{2}}}dy}\,dx}}" loading="lazy"></span></dd></dl>
<p>kann näherungsweise mit
</p>
<pre> Z:=SIMPSON(0,1,SIMPSON(-1,1,EXP(SQRT(X 'POWER' 2+Y 'POWER' 2)),Y,20),X,20);
</pre>
<p>berechnet werden. Dies ist weder mit Referenzparametern, Wertparametern noch mit einfachen C-Makros in dieser Form realisierbar.
</p></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2018-12-11" href="https://de.wikipedia.org/wiki/?title=Namensparameter&oldid=183611496">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>